<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class venta_producto_servicioM extends CI_Model {

    public function __construct() {
        $this->load->database();
    }

    public function insertarVenta($idReserva, $idCliente, $impuesto, $descuento, $total, $usuarioEncargado, $modoPago, $notas) {//venta en la reserva, notese que el tipo es en hospedaje 
        $query = "INSERT INTO venta_producto_servicio(id_reserva,id_cliente,tipo,fecha,impuesto,descuento,total_venta,usuario_encargado,modo_pago,descripcion,estatus) VALUES('$idReserva','$idCliente','En hospedaje',DATE_ADD(now(), INTERVAL -5 HOUR),'$impuesto','$descuento','$total','$usuarioEncargado','$modoPago', '$notas','En curso');";
        return $this->db->query($query);
    }

    public function insertarVentaExtra($idReserva, $idCliente, $impuesto, $tipo, $descuento, $total, $usuarioEncargado, $notas, $estatus, $modopago) {
        $reserva = ($idReserva == NULL) ? " NULL " : $idReserva;
        $query = "INSERT INTO venta_producto_servicio(id_reserva,id_cliente,fecha,tipo,impuesto,descuento,total_venta,usuario_encargado,descripcion,estatus,modo_pago) VALUES($reserva,'$idCliente',DATE_ADD(now(), INTERVAL -5 HOUR),'$tipo','$impuesto','$descuento','$total','$usuarioEncargado', '$notas','$estatus','$modopago');";
        return $this->db->query($query);
    }

    public function obtenerVentas($idReserva) {
        $query = "SELECT vps.*,c.nombre nombrePersona,c.primer_apellido,c.segundo_apellido, ps.nombre nombreProducto,ps.valor,ps.id_servicio, ps.id_categoria_producto, pv.cantidad FROM 
                 venta_producto_servicio vps
                 join cliente c on vps.id_cliente=c.id_cliente
                 left join producto_x_venta pv on vps.id_venta_servicio=pv.id_venta_servicio
                 left join producto_servicio ps on pv.id_servicio=ps.id_servicio where vps.id_reserva='$idReserva' ORDER BY vps.fecha DESC";
        //  echo $query;
        return $this->db->query($query)->result();
    }

    public function obtenerTotalConsumos($idReserva) {
        $query = "SELECT  COALESCE(SUM(total_venta),0) totalConsumos from venta_producto_servicio WHERE id_reserva='$idReserva'";
        return $this->db->query($query)->result();
    }

    public function obtenerTotalImpuestosConsumos($idReserva) {
        $query = "SELECT  COALESCE(SUM(impuesto),0) totalImpuestosConsumo from venta_producto_servicio WHERE id_reserva='$idReserva'";
        return $this->db->query($query)->result();
    }

    public function eliminarVenta($idVentaServicio, $idEstablecimiento) {
        $query = "DELETE vps.* FROM venta_producto_servicio vps,cliente c where  vps.id_cliente=c.id_cliente AND c.id_establecimiento='$idEstablecimiento' AND vps.id_venta_servicio='$idVentaServicio'";
        //echo $query;
        return $this->db->query($query);
    }

    public function eliminarVentaPorDevolucion($idVentaServicio) {
        $query = "DELETE  FROM venta_producto_servicio  where   id_venta_servicio='$idVentaServicio'";
        //echo $query;
        return $this->db->query($query);
    }

    public function obtenerDatos($datos, $idVentaServicio) {
        $query = "Select $datos from venta_producto_servicio where id_venta_servicio='$idVentaServicio'";
        return $this->db->query($query)->result();
    }

    public function query($query) {
        // echo $query;
        return $this->db->query($query)->result();
    }

    public function obtenerVentasTotales($idEstablecimiento, $filasPorPagina, $inicio, $criterios) {
        $query = "Select vps.*,
            c.nombre,c.primer_apellido,c.segundo_apellido,ps.nombre producto_nombre,pv.cantidad,
            u.nombre_completo nombre_usuario,cps.nombre nombre_categoria,cps.id_categoria_producto, ps.valor precio_unitario, ps.id_servicio
            from venta_producto_servicio vps,cliente c,producto_x_venta pv, producto_servicio ps, usuario u,categoria_producto_servicio cps
             where vps.id_cliente=c.id_cliente 
            AND pv.id_servicio=ps.id_servicio
            AND pv.id_venta_servicio=vps.id_venta_servicio
            AND vps.usuario_encargado=u.id_usuario
            AND ps.id_categoria_producto=cps.id_categoria_producto
            AND c.id_establecimiento='$idEstablecimiento' ";
        $query.=(!empty($criterios['categoria'])) ? " AND ps.id_categoria_producto='{$criterios['categoria']}'" : " ";
        $query.=(!empty($criterios['producto'])) ? "AND ps.id_servicio='{$criterios['producto']}'" : " ";
        $query.=(!empty($criterios['tipo'])) ? " AND vps.tipo='{$criterios['tipo']}'" : " ";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <=  '{$criterios['hasta']} 23:59:59'" : " ";
        $query.=(!empty($criterios['modopago'])) ? " AND vps.modo_pago = '{$criterios['modopago']}'" : " ";
        $query.=(!empty($criterios['usuario'])) ? " AND u.id_usuario = '{$criterios['usuario']}'" : " ";
        $query.=(!empty($criterios['estatus'])) ? " AND vps.estatus = '{$criterios['estatus']}'" : " ";
        $query.=" order by vps.fecha DESC LIMIT $inicio,$filasPorPagina";
        return $this->db->query($query)->result();
    }

    public function obtenerResumenVentasTotales($idEstablecimiento, $criterios) {
        $query = "Select  COALESCE(sum(vps.total_venta),0) total,COALESCE(sum(vps.impuesto),0) impuesto, COALESCE(sum(pv.cantidad),0) cantidad_productos
            from venta_producto_servicio vps,cliente c,producto_x_venta pv, producto_servicio ps, usuario u,categoria_producto_servicio cps
             where vps.id_cliente=c.id_cliente 
            AND pv.id_servicio=ps.id_servicio
            AND pv.id_venta_servicio=vps.id_venta_servicio
            AND vps.usuario_encargado=u.id_usuario
            AND ps.id_categoria_producto=cps.id_categoria_producto
            AND c.id_establecimiento='$idEstablecimiento' ";
        $query.=(!empty($criterios['categoria'])) ? " AND ps.id_categoria_producto='{$criterios['categoria']}'" : " ";
        $query.=(!empty($criterios['producto'])) ? "AND ps.id_servicio='{$criterios['producto']}'" : " ";
        $query.=(!empty($criterios['tipo'])) ? " AND vps.tipo='{$criterios['tipo']}'" : " ";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <=  '{$criterios['hasta']} 23:59:59'" : " ";
        $query.=(!empty($criterios['modopago'])) ? " AND vps.modo_pago = '{$criterios['modopago']}'" : " ";
        $query.=(!empty($criterios['usuario'])) ? " AND u.id_usuario = '{$criterios['usuario']}'" : " ";
        $query.=(!empty($criterios['estatus'])) ? " AND vps.estatus = '{$criterios['estatus']}'" : " ";
        return $this->db->query($query)->result();
    }

    public function contarVentas($idEstablecimiento, $criterios) {
        $query = "Select count(*) cantidad
            from venta_producto_servicio vps,cliente c,producto_x_venta pv, producto_servicio ps, usuario u
             where vps.id_cliente=c.id_cliente 
            AND pv.id_servicio=ps.id_servicio
            AND pv.id_venta_servicio=vps.id_venta_servicio
            AND vps.usuario_encargado=u.id_usuario
            AND c.id_establecimiento='$idEstablecimiento' ";
        $query.=(!empty($criterios['categoria'])) ? " AND ps.id_categoria_producto='{$criterios['categoria']}'" : " ";
        $query.=(!empty($criterios['producto'])) ? "AND ps.id_servicio='{$criterios['producto']}'" : " ";
        $query.=(!empty($criterios['tipo'])) ? " AND vps.tipo='{$criterios['tipo']}'" : " ";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <=  '{$criterios['hasta']} 23:59:59'" : " ";
        $query.=(!empty($criterios['modopago'])) ? " AND vps.modo_pago = '{$criterios['modopago']}'" : " ";
        $query.=(!empty($criterios['usuario'])) ? " AND u.id_usuario = '{$criterios['usuario']}'" : " ";
        $query.=(!empty($criterios['estatus'])) ? " AND vps.estatus = '{$criterios['estatus']}'" : " ";
        return $this->db->query($query)->result();
    }

    public function actualizarConsumosCheckout($idReserva) {//Despues de hacer checkout lso consumos se deben poner como pagados
        $query = "UPDATE venta_producto_servicio set estatus='Pagado'  where id_reserva='$idReserva'";
        return $this->db->query($query);
    }

    public function actualizarConsumosDeshacerCheckout($idReserva) {//Despues de hacer checkout lso consumos se deben poner como pagados
        $query = "UPDATE venta_producto_servicio set estatus='En curso'  where id_reserva='$idReserva'";
        $this->db->query($query);
    }

    public function actualizarEstatusPagado($id_venta_servicio, $modopago) {
        $query = "UPDATE venta_producto_servicio set estatus='Pagado',modo_pago='$modopago'  where id_venta_servicio='$id_venta_servicio'";
        $this->db->query($query);
    }

    public function actualizarEstatusPendiente($id_venta_servicio) {
        $query = "UPDATE venta_producto_servicio set estatus='Pendiente',modo_pago=''  where id_venta_servicio='$id_venta_servicio'";
        $this->db->query($query);
    }

    public function venPenPago($idEstablecimiento, $filasPorPagina, $inicio, $criterios) {
        $query = "select vps.*,c.nombre nombre_cliente from venta_producto_servicio vps, cliente c where c.id_cliente=vps.id_cliente and tipo='Extra' and estatus='Pendiente' and c.id_establecimiento='$idEstablecimiento'";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <= '{$criterios['hasta']} 23:59:59'" : " ";
        $query.=" order by vps.fecha  DESC LIMIT $inicio,$filasPorPagina";
        return $this->db->query($query)->result();
    }

    public function venPenPagoTotales($idEstablecimiento, $criterios) {
        $query = "select COALESCE(SUM(vps.total_venta),0) totalDeuda from venta_producto_servicio vps, cliente c where c.id_cliente=vps.id_cliente and tipo='Extra' and estatus='Pendiente' and c.id_establecimiento='$idEstablecimiento'";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <= '{$criterios['hasta']} 23:59:59'" : " ";
        return $this->db->query($query)->result();
    }

    public function cantidaVenPenPago($idEstablecimiento, $criterios) {
        $query = "select count(*) cantidad from venta_producto_servicio vps, cliente c where c.id_cliente=vps.id_cliente and tipo='Extra' and estatus='Pendiente' and c.id_establecimiento='$idEstablecimiento'";
        $query.=(!empty($criterios['desde'])) ? " AND vps.fecha >= '{$criterios['desde']} 00:00:00'" : " ";
        $query.=(!empty($criterios['hasta'])) ? " AND vps.fecha <= '{$criterios['hasta']} 23:59:59'" : " ";
        return $this->db->query($query)->result();
    }

    public function obtenerVentaExtra($idventaservicio) {
        $query = "select count(*) cantidad from venta_producto_servicio vps, cliente c where vps.id_venta_servicio='$idventaservicio' and c.id_cliente=vps.id_cliente and c.id_establecimiento='{$_SESSION["establecimiento"]["id_establecimiento"]}'";
        return $this->db->query($query)->result();
    }

    public function detallesVenta($idVenta) {
        $query = "select vps.*,ps.nombre nombre_producto,pv.cantidad,
            c.nombre nombre_cliente,c.primer_apellido,c.segundo_apellido,c.identificacion,c.email,c.telefono,c.id_pais,c.direccion   from venta_producto_servicio vps,cliente c,producto_x_venta pv, producto_servicio ps where
            vps.id_cliente=c.id_cliente and
             pv.id_servicio=ps.id_servicio
            AND pv.id_venta_servicio=vps.id_venta_servicio
             AND vps.id_venta_servicio='$idVenta'";
        // echo $query;
        return $this->db->query($query)->result();
    }

    public function setNumerofactura($idVenta, $numeroFactura) {
        $query = "update venta_producto_servicio set numero_factura='$numeroFactura' where id_venta_servicio='$idVenta'";
        // echo $query;
        return $this->db->query($query);
    }

}